// 类型注解
// 对变量的数据类型的说明
// 变量       可以是函数参数的变量
// 数据类型   可以是基本的数据类型，还可以是 数组， 对象。。。。

var a: number = 10
var b: string = '100'
var c: boolean = true
// var d: object = { // 还是不知道该对象下有哪些字段，每种字段的数据类型
//   name: '吴大勋',
//   age: 18
// }
// 接口 - interface 关键字 接口名称约定以I开头再加功能
// 接口内部使用 ; 要不就不写，要写就写 ;
interface IUser {
  name: string;
  age: number;
}
// var d: IUser = {
//   name: '吴大勋',
//   age: 18
// }
var d: {
  name: string;
  age: number;
} = {
  name: '吴大勋',
  age: 18
}

// 数组的类型注解
// Array<数据类型>    泛型
// 数据类型[]
var e: Array<number> = [1, 2, 3, 4]
var f: number[] = [5, 6, 7, 8]

// 对象类型的数组的类型注解
var g: Array<IUser> = [
  {
    name: '吴大勋',
    age: 18
  },
  {
    name: '李泽阳',
    age: 28
  }
]
var h: IUser[] = [
  {
    name: '吴大勋',
    age: 18
  },
  {
    name: '李泽阳',
    age: 28
  }
]

// 有子集时 接口可以在内部继续使用，要注意 选项是不是必选项
interface IRoute {
  path: string;
  title: string;
  children?: Array<IRoute>; // ? 代表当前的对象可有可无的选项 
}

var i: IRoute[] = [
  {
    path: '/pro',
    title: '产品管理',
    children: [
      {
        path: '/pro/list',
        title: '产品列表'
      },
      {
        path: '/pro/recommend',
        title: '推荐列表'
      }
    ]
  }
]